package com.ssy.lingxi.workflow.service;

import org.camunda.bpm.engine.repository.ProcessDefinition;
import org.camunda.bpm.model.bpmn.BpmnModelInstance;

import java.util.List;

/**
 * 流程图解析相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-04-21
 */
public interface IProcessDeployService {

    /**
     * 获取Resource目录下，*.bpmn文件中定义的processKey
     * @return processKey列表
     */
    List<String> getProcessKeyInBpmnFiles();

    /**
     * 检查Resource目录下所有*.bpmn文件中的ProcessKey是否有重复
     * @return 错误信息
     */
    String checkDuplicateProcessKey();

    /**
     * 删除已经部署，但在Resource目录下没有对应bpmn文件的流程
     */
    void deleteDeploymentWithoutBpmnFile();

    /**
     * 检查流程图的定义
     * @param processDefinition 流程定义
     * @param model Bpmn模型
     */
    String checkProcessModel(ProcessDefinition processDefinition, BpmnModelInstance model);

    /**
     * 将流程定义，转换为自定义的数据库表进行存储
     * @param processDefinition 流程定义
     * @param model Bpmn模型
     */
    void deployProcess(ProcessDefinition processDefinition, BpmnModelInstance model);

    /**
     * 解析内部流程
     * @param processDefinition 流程定义
     * @param model Bpmn模型
     */
    void deployInternalProcess(ProcessDefinition processDefinition, BpmnModelInstance model);

    /**
     * 解析外部流程
     * @param processDefinition 流程定义
     * @param model Bpmn模型
     */
    void deployExternalProcess(ProcessDefinition processDefinition, BpmnModelInstance model);

    /**
     * 解析复杂流程
     * @param processDefinition 流程定义
     * @param model Bpmn模型
     */
    void deployComplexProcess(ProcessDefinition processDefinition, BpmnModelInstance model);
}
